package interface_;

public class Interface {
    //实现多态
    public static void show(Animal animal) { //向上转型，实现多态
        animal.bark(); //动态绑定，实现多态
    }
//    法一
    //实现接口重写方法的多态
    public static void run(IRunning irunning) {
        irunning.running();
    }
    public static void fly(IFlying iflying) {
        iflying.flying();
    }
    public static void swim(ISwimming iswimming) {
        iswimming.swimming();
    }

//    法二
    //访问接口抽象类的重写方法
    public static void scan(Animal animal) {//注意static
        if(animal instanceof Dog) {
            ((Dog) animal).swimming();
            ((Dog) animal).running();//重写后，Dog的running和Chicken的running不一样
        }else if(animal instanceof Chicken){
            ((Chicken)animal).flying();
            ((Chicken)animal).running();
        }
    }

    public static void main(String[] args) {
        Dog dog = new Dog("油条",3);
        Chicken chicken = new Chicken("鸡你太美");

        //dog实现接口抽象方法重写，实现多态
        System.out.println("法一");
        System.out.println("dog实现接口抽象方法重写，实现多态");
        run(dog);
        //fly(dog);  Dog没有继承Flying这个接口，所以该行会报错
        swim(dog);
        System.out.println("----------------");

        //chicken实现接口抽象方法重写，实现多态
        System.out.println("chicken实现接口抽象方法重写，实现多态");
        run(chicken);
        fly(chicken);
        //swim(chicken);  Chicken没有继承Swimming这个接口，所以该行会报错
        System.out.println("----------------");

        //调用方法从而访问接口中抽象方法的重写方法
        System.out.println("法二");
        System.out.println("调用方法从而访问接口中抽象方法的重写方法");
        scan(dog);
        scan(chicken);
        System.out.println("----------------");

        //重写从父类继承的方法，实现多态
        System.out.println("重写从父类继承的方法，实现多态");
        dog.bark();
        chicken.bark();

    }
}
